import { defineStore } from 'pinia'
export const useCartStore = defineStore({
    id: 'cart',
    state: () => {
        return {
            cartList: [], //购物车数据
            select: [], //选中的商品id
            orderList: [] //结算的商品 
        }
    },
    getters: {
        isChecked() {
            // 选中商品的id数量 ==  数据选中（伪数据一直存在的）商品数量
            // console.log(this.select.length, this.cartList.length)
            return this.select.length == this.cartList.length
        },
        // 总价和数量
        total() {
            let total = {
                price: 0,
                number: 0
            }

            this.orderList = [];
            this.cartList.forEach(v => {

                // 如果 在所有商品id中 能和 选中商品id 匹配上 则有多少个匹配上的就 就进行多少次操作 
                if (this.select.indexOf(v.id) != -1) {
                    total.price += v.counter * v.salePrice;
                    total.number = this.select.length;

                    // 加入结算的商品
                    this.orderList.push({
                        number: 1,
                        id: v.courseId
                    })
                }

            })

            return total;
        }
    },
    actions: {
        // 存储购物车数据
        addCart(list) {
            this.select = [];

            console.log(list)
            // 添加check属性 为全选功能做准备
            list.forEach(v => {

                v['check'] = true;
                // 此时装载了所有的 商品id
                this.select.push(v.id);
            })
            // 存储所有请求过来的加入购物车数据 
            this.cartList = list
        },
        // 全选
        all() {
            this.select = this.cartList.map(v => {
                v['check'] = true;
                return v.id;
            })
        },
        // 全不选
        unAll() {
            this.cartList.forEach(v => {
                v['check'] = false;
            })
            // 不选则 清除id 
            this.select = [];

        },
        //单选
        itemChecked(index) {
            // 购物车数据的下标
            console.log(index)
            // 当前点击的课程的id
            let id = this.cartList[index].id;
            console.log("id:" + id)

            console.log(this.select)

            // 去检查select(所有的商品id)中有没有 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
            let idx = this.select.indexOf(id);
            console.log("idx:" + idx)
            if (idx > -1) {
                // 有 
                this.cartList[index].check = false;
                this.select.splice(idx, 1);
            } else {
                // 没有
                this.cartList[index].check = true;
                this.select.push(id);
            }
        }

    }

})